<?php
class DependenciesController extends AppController {
	var $name = 'Dependencies';
	var $helpers = array ('html', 'form', 'time', 'javascript', 'Pagination' );
	var $layout = 'menu';
	
	// Modelos que usa el controlador
	var $uses = array ('Dependency', 'Task_dependency', 'Task', 'Person', 'Task_employee', 'User' );
	
	// Componentes que usa el controlador, por ahora en realidad no
	var $components = array ('Pagination' );
	
	/*Desc: Muestra los datos completos de la dependencia seleccionada.
		*/
	function ver($id) {
		if (isset ( $id )) {
			//Obtengo los datos de la dependencia en cuestion.
			$dependencia = $this->Dependency->findByid ( $id );
			$this->set ( 'datos_dependencia', $dependencia );
		} else {
			$this->redirect ( 'dependencies/index' );
		}
	}
	
	function index() {
		// Si me dan algo por get, es que se tiene que realizar una accion
		if (isset ( $this->namedArgs ['id'] )) {
			if (isset ( $this->namedArgs ['accion'] )) {
				$id = $this->namedArgs ['id'];
				$accion = $this->namedArgs ['accion'];
				if ($accion == "del")
					$this->del ( $id );
				else if ($accion == "edit")
					$this->redirect ( "/dependencies/add/id=$id" );
			}
		}
		
		$this->pageTitle = 'Ver Dependencias';
		
		$this->Pagination->show = 5;
		list ( $order, $limit, $page ) = $this->Pagination->init ( null ); // Added
		$data = $this->Dependency->findAll ( null, null, $order, $limit, $page ); // Extra parameters added
		$this->set ( 'dependencias', $data );
	}
	
	function validDependency($checkExist = true) {
		$valid = true;
		if ($checkExist) {
			$dependencia = $this->Dependency->find ( "nombre='" . $this->data ['Dependency'] ['nombre'] . "' AND sede='" . $this->data ['Dependency'] ['sede'] . "'" );
			if ($dependencia) {
				$valid = false;
				$this->Dependency->invalidate ( 'dependencia_unica' );
			}
		}
		if (! $valid)
			$this->set ( 'error', 'No se pudo guardar. Vea los errores por favor.' );
		return $valid;
	}
	
	function add() {
		
		$this->pageTitle = 'Registrar Dependencia';
		
		$this->set ( 'size', '20' );
		$this->set ( "tareas", $this->Task->generateList ( null, null, null, '{n}.Task.id', '{n}.Task.nombre' ) );

		// Si se le pasa el id, es que es edicion
		if (isset ( $this->namedArgs ['id'] )) {

			$id = $this->namedArgs ['id'];
			if ( !($this->isUserAdminOfDependency() && $id==$this->getUserDependency())  
					|| $this->isUserSuperAdmin() )
			{
				//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
				$this->redirect ( '/index' );
			}
			
			$this->pageTitle = 'Editar Dependencia';
			
			// Se setea la accion como edicion
			$this->set ( 'action', 'edit' );
			
			// Se obtiene la dependencia
			$dependencia = $this->Dependency->find ( "id=$id" );
			if ($dependencia) {
				$this->data = $dependencia;
				
				//se obtienen las tareas de la dependencia
				$this->set ( "tareas_dependencia", $this->Task_dependency->findAll ( "id_dependencia=$id" ) );
			} else {
				$this->redirect ( 'dependencies/index' );
				return;
			}
		} else {
			if ( !$this->isUserSuperAdmin() )
			{
				//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
				$this->redirect ( '/index' );
			}
			
			// Se setea la accion como para agregar una dependencia
			$this->set ( 'action', 'add' );
			
			if (! empty ( $this->data )) {
				if (! $this->validDependency ()) {
					$this->render ();
					return;
				}
				
				if ($this->Dependency->save ( $this->data ['Dependency'] )) {
					$this->redirect ( '/dependencies/index' );
				} else {
					$this->render ();
					return;
				}
			}
		}
	}
	
	// Se actualizan los datos de una dependencia
	function update() {
		if ($this->Session->read ( 'usrEsAdmin' ) != 1 && ! $this->isUserDependency ( $this->data ['Dependency'] ['id'] )) {
			//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
			$this->redirect ( '/index' );
		}
		
		if ($this->validDependency ( false )) {
			if ($this->Dependency->update ( $this->data ['Dependency'] )) {
				$this->redirect ( '/dependencies/index' );
				return;
			}
		}
		
		// Se actualiza los datos de la dependencia
		$this->pageTitle = 'Editar Dependencia';
		
		// Se setea la accion como edicion
		$this->set ( 'action', 'edit' );
		$this->set ( 'size', '20' );
		$this->set ( "tareas", $this->Task->generateList ( null, null, null, '{n}.Task.id', '{n}.Task.nombre' ) );
		$this->render ( 'add' );
	
	}
	
	function add_task() {
		if ($this->Session->read ( 'usrEsAdmin' ) != 1 && ! $this->isUserDependency ( $this->data ['Dependency'] ['id'] )) {
			//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
			$this->redirect ( '/index' );
		}
		
		// Me fijo si no esta agregada ya
		$id_funcion = $this->data ['Task_dependency'] ['id_funcion'];
		$id_dependencia = $this->data ['Dependency'] ['id'];
		
		if (! $this->Task_dependency->find ( 'id_dependencia=' . $id_dependencia . ' AND id_funcion=' . $id_funcion )) {
			$this->data ['Task_dependency'] ['id_dependencia'] = $id_dependencia;
			$this->Task_dependency->save ( $this->data ['Task_dependency'] );
		}
		
		// Se redirecciona a la pagina que lista las personas
		$this->redirect ( '/dependencies/add/id=' . $id_dependencia );
	}
	
	//borra tarea de la dependencia		
	function del_task() {
		if ($this->Session->read ( 'usrEsAdmin' ) != 1 && ! $this->isUserDependency ( $this->data ['Dependency'] ['id'] )) {
			//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
			$this->redirect ( '/index' );
		}
		
		$id_dependencia = $this->data ['Dependency'] ['id'];
		if (isset ( $this->namedArgs ['id'] )) {
			// Me fijo si existe
			$id_task = $this->namedArgs ['id'];
			$task_dep = $this->Task_dependency->findById ( $id_task );
			if ($task_dep) {
				$this->Task_dependency->del ( $id_task );
			}
		}
		if ($id_dependencia)
			$this->redirect ( '/dependencies/add/id=' . $id_dependencia );
		else
			$this->redirect ( '/dependencies/index' );
	}
	
	// Se borra una dependencia
	function del($id = null) {
		
		if ($this->Session->read ( 'usrEsAdmin' ) != 1) {
			//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
			$this->redirect ( '/index' );
			return;
		}
		
		if (! empty ( $this->data ['Dependency'] ['id'] ))
			$id = $this->data ['Dependency'] ['id'];
		
		if ($id) {
			$this->Dependency->del ( $id );
		}
		$this->redirect ( '/dependencies/index' );
	}
	
	// Se borra una lista de dependencias seleccionadas
	function del_seleccion() {
		if ($this->Session->read ( 'usrEsAdmin' ) != 1) {
			//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
			$this->redirect ( '/index' );
		}
		
		if (! empty ( $this->data )) {
			foreach ( $this->data ['Dependency'] as $key => $dependency ) :
				if ($dependency != 0) {
					$this->Dependency->del ( ltrim ( $key ) );
				}
			endforeach;
		}
		$this->redirect ( '/dependencies/index' );
	}
	
	/*
    		Funcion que permite buscar dependencias.
    		Se puedo buscar por:
    			- Nombre 
    			- Sede
    			- Nombre y sede
    	*/
	function find() {
		
		$this->pageTitle = 'Buscar Dependencias';
		
		$nombre = $this->data ['Dependency'] ['nombre'];
		$sede = $this->data ['Dependency'] ['sede'];
		
		if ($nombre != '' || $sede != '') {
			$query = '';
			if ($nombre != '') {
				// Se busca por nombre y se si existe por sede
				$query = 'nombre LIKE "%' . $nombre . '%"' . ($sede != '' ? ' AND sede LIKE "%' . $sede . '%"' : '');
			} else if ($sede != '') {
				// Se busca solamente por sede
				$query = 'sede LIKE "%' . $sede . '%"';
			}
			
			// Se setea el resultado para que la vista lo pueda renderisar
			$result = $this->Dependency->findAll ( $query );
			if ($result) {
				$this->set ( 'paging', 0 );
				$this->set ( 'titulo', "Resultado de la busqueda" );
				$this->set ( 'dependencias', $result );
				$this->render ( 'index' );
			} else {
				$this->set ( 'error', 'No se encontraron resultados' );
				$this->render ();
			}
		}
	}
	
	function assignTasks() {
		$id_dependencia = $this->Session->read ( 'usrIdDependencia' );
		if ($this->Session->read ( 'usrEsAdmin' ) != 1 && $id_dependencia > 0) {
			//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
			$this->redirect ( '/index' );
		}
		
		if (! empty ( $this->data )) {
			$this->data ['Task_employee'] ['id_dependencia'] = $id_dependencia;
			$this->Task_employee->save ( $this->data ['Task_employee'] );
		}
		
		$tasks = $this->Task_dependency->obtenerDatosAMostrar ( "id_dependencia=$id_dependencia" );
		$employees = $this->Person->obtenerDatosAMostrar ( "is_funcionario=1 AND id_dependencia".$this->getUserDependency() );
		$tasks_employees = $this->Task_employee->findAll ( "id_dependencia=$id_dependencia" );
		
		$this->set ( 'dependency_id', $id_dependencia );
		$this->set ( 'tasks', $tasks );
		$this->set ( 'employees', $employees );
		$this->set ( 'tasks_employees', $tasks_employees );
	}
	
	//borra tarea de la dependencia		
	function del_assignment() {
		$id_dependencia = $this->Session->read ( 'usrIdDependencia' );
		if ($this->Session->read ( 'usrEsAdmin' ) != 1 && $id_dependencia != NULL) {
			//PARA QUE NO PERMITA ACCESO A USUARIO NO ADMINISTRADOR
			$this->redirect ( '/index' );
		}
		
		if (isset ( $this->namedArgs ['id'] )) {
			// Me fijo si existe
			$id_assignment = $this->namedArgs ['id'];
			$task_employee = $this->Task_employee->find ( "`Task_employee`.id=$id_assignment AND id_dependencia=$id_dependencia" );
			if ($task_employee) {
				$this->Task_employee->del ( $id_assignment );
			}
		}
		$this->redirect ( '/dependencies/assignTasks' );
	}

}

?>
